import axios from 'axios';
import Url from './url';
import { Modal } from 'antd';



const instance = axios.create({
  baseURL:Url.baseURL,
  timeout: 10000, // 超时时间
  headers: {
    'Content-Type': 'application/json',
  },
});

// 登录相关 API
export const loginApi = {
  // 用户登录
  login: (username, password) => {
    return instance.post(Url.login, { username, password });
  },
  // 用户登出
  logout: () => {
    return instance.post(Url.logout);
  }
};

// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 添加 token 到请求头
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = token;
    }

    return config;
  },
  error => Promise.reject(error)
);

// 响应拦截器
instance.interceptors.response.use(
  response => {
    const res = response.data
    if(!res.success){
      Modal.error({
        title: '错误',
        content: res.msg || '请求失败'
      });
      return Promise.reject(res.msg)
    }

    return response.data
  },
  error => {
    if (error.response?.status === 401) {
          // token 过期或无效，跳转登录页
          localStorage.removeItem('token')
          // window.location.href = '/login'
      }

    // 统一错误处理
    if (error.response) {
      // HTTP 状态码错误
      Modal.error({
        title:`服务端错误(${error.response.status})`,
        content:error.response.data.msg || error.response.data
      });
    } else if (error.request) {
      console.log(error)
      // 网络错误
      // Modal.error({
      //   title:'网络错误',
      //   content: error.msg || '网络错误'
      // });

    } else {
      // 其他错误
      Modal.error({
        title:'其他错误',
        content:error.msg || '请求错误'
      });
    }
    return Promise.reject(error);
  }
);




// 封装 baseQuery 方法
export const api = async ({url,data={},params={},config={}}) => {
  
  const isGet = JSON.stringify(data) === "{}" // Object.keys(data).length === 0
  try {
    const response = await instance({
      url,
      method : isGet ? 'get' : 'post' ,
      [isGet ? 'params' : 'data']: isGet ? params : data,
      ...config,
    });
    return response;
  } catch (error) {
    // 可以在这里统一处理错误
    throw error;
  }
};


// export const api = async ({url,data={},params={},config={}}) => {
//   const isGet = Object.keys(data).length === 0
//   try {
//     const response = await request({url,  data,params, config});
//     return response;
//   } catch (error) {
//     // 可以在这里统一处理错误
//     throw error;
//   }
// };


// 单行数据查询封装
export const queryOne = async ({url,data={},params={},config={}}) => {
  const result = await api({url,  data,params, config});
  // 假设后端返回的数据结构为 { data: [...] }
  if (Array.isArray(result?.data)) {
    return result.data[0] || null;
  }
  // 如果直接返回对象
  return result?.data || null;
};


export const queryList = async ({url,data={},params={},config={}}) => {
  const isGet = Object.keys(data).length === 0
  try {
    const response = await api({url,  data,params, config});
    return response.data;
  } catch (error) {
    // 可以在这里统一处理错误
    throw error;
  }
};







export default instance;